#include "../Entetes/transitions.h"

/*!
Ce constructeur permet de créer une transition triviale.
Tous les booléens sont à faux.
\fn transitions::transitions()
\brief Constructeur par défaut.
*/
transitions::transitions()
{
	epsilon=false;
	for (int i=0; i<256; i++)
	{
		trans.push_back(0);
	}
}

/*!
Ce constructeur permet de créer une transition à partir d'un tableau d'entiers.
Tous les booléens sont copiés du paramètre, sauf epsilon qui est passé à faux.
\fn transitions::transitions(std::vector<bool> entiers)
\param std::vector<bool> entiers
\brief Constructeur par copie.
*/
transitions::transitions(std::vector<bool> entiers)
{
	if (entiers.size() != 256)
		cout << "erreur d'initialisation de Transitions" << endl;
	epsilon=false;
	for (int i=0; i<256; i++)
	{
		trans.push_back(entiers[i]);
	}
}

/*!
Ce constructeur permet de créer une transition à partir d'un tableau d'entiers et d'un booléen. Toutes les variables de tableau sont copiés du paramètre, et epsilon est passé à faux.
\fn transitions::transitions(bool val, std::vector<bool> entiers)
\param bool val, std::vector<bool> entiers
\brief Constructeur par copie.
*/
transitions::transitions(bool val, std::vector<bool> entiers)
{
	if (entiers.size() != 256)
		cout << "erreur d'initialisation de Transitions" << endl;
	epsilon = val;
	for (int i=0; i<256; i++)
	{
		trans.push_back(entiers[i]);
	}
}

/*!
Ce constructeur permet de créer une transition pour un état puits. Tous les booléens sont à vrai sauf epsilon qui est à faux
\fn void transitions::transitions_puits()
\brief retourne la transition d'un état puits.
\deprecated
*/
void transitions::transitions_puits()
{
	epsilon=false;
	trans.clear();
	for (int i=0; i<256; i++)
	{
		trans.push_back(true);
	}
}


/*!
fonction d'affichage
\fn void transitions::affichage()
\brief retourne la transition d'un état puits.
\deprecated
*/
void transitions::affichage()
{
	cout << "epsilon-transition?" << epsilon << endl;
	cout << "l'etat possède une transition pour les caractères de code ascii: { ";
	for (unsigned int i=0; i<256; i++)
	{
 		if (trans[i])
			cout << (unsigned char)i << " ";
	}
	cout << "}" << endl;
}

/*!
accesseur renvoyant la valeur d'epsilon
\fn bool transitions::get_epsilon()
*/
bool transitions::get_epsilon()
{
	return epsilon;
}

/*!
accesseur renvoyant vrai si l'état associé possède une transition pour le caractère de code ascii i
\fn bool transitions::get_trans(unsigned char i)
\param unsigned char i
*/
bool transitions::get_trans(unsigned char i)
{
	return trans[i];
}

/*!
mutateur mettant à jour le champ epsilon
\fn void transitions::set_epsilon(bool val)
\param bool val
*/
void transitions::set_epsilon(bool val)
{
	epsilon=val;
}

/*!
mutateur modifiant la transition pour le caractère de code ascii i
\fn void transitions::set_trans(unsigned char i, bool val)
\param unsigned char i, bool val
*/
void transitions::set_trans(unsigned char i, bool val)
{
	trans[i]=val;
}
